package jwcb.hire.admin.server.map.controller;


import jwcb.hire.admin.api.map.domain.dto.CityLocationReqDto;
import jwcb.hire.admin.api.map.domain.dto.PlaceSearchReqDto;
import jwcb.hire.admin.api.map.domain.vo.RegionCityVO;
import jwcb.hire.admin.api.map.domain.vo.RegionVO;
import jwcb.hire.admin.api.map.domain.vo.SearchPoiVO;
import jwcb.hire.admin.api.map.feign.MapFeignClient;
import jwcb.hire.admin.server.map.domain.dto.SysRegionDTO;
import jwcb.hire.admin.server.map.domain.dto.qq.RegionCityDTO;
import jwcb.hire.admin.server.map.domain.dto.qq.SearchPoiDtTO;
import jwcb.hire.admin.server.map.service.IMapService;
import jwcb.hire.common.core.utils.BeanCopyUtil;
import jwcb.hire.common.domain.domain.R;
import jwcb.hire.common.domain.domain.dto.BasePageDTO;
import jwcb.hire.common.domain.domain.vo.BasePageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;


@Slf4j
@RestController
public class MapController implements MapFeignClient {


    @Autowired
    private IMapService mapService;
    /**
     * 城市列表查询
     * @return 城市列表信息
     */
    @Override
    public R<List<RegionVO>> getCityList() {
        List<SysRegionDTO> cityList = mapService.getCityList();
        List<RegionVO> regionVOS = BeanCopyUtil.copyListProperties(cityList, RegionVO::new);
        return R.ok(regionVOS);
    }



    /**
     * 城市拼音归类查询
     * @return 城市字母与城市列表的哈希
     */
    @Override
    public R<Map<String, List<RegionVO>>> getCityPyList() {
        Map<String,List<RegionVO>> result = new LinkedHashMap<>();
        Map<String,List<SysRegionDTO>> pinyinList = mapService.getCityPyList();
        for(Map.Entry<String,List<SysRegionDTO>> entry : pinyinList.entrySet()){
            result.put(entry.getKey(),BeanCopyUtil.copyListProperties(entry.getValue(),RegionVO::new));
        }
        return R.ok(result);
    }


    /**
     * 根据父级区域ID获取子集区域列表
     * @param parentId 父级区域id
     * @return 子集区域列表
     */
    @Override
    public R<List<RegionVO>> getRegionChildrenList(Long parentId) {
        List<SysRegionDTO> sysRegionDTOS = mapService.getRegionChildrenList(parentId);
        List<RegionVO> regionVOS = BeanCopyUtil.copyListProperties(sysRegionDTOS, RegionVO::new);
        return R.ok(regionVOS);
    }



    /**
     * 获取热门城市列表
     * @return 热门城市列表
     */
    @Override
    public R<List<RegionVO>> getCityHotList() {
        List<SysRegionDTO> sysRegionDTOS = mapService.getCityHotList();
        List<RegionVO> regionVOS = BeanCopyUtil.copyListProperties(sysRegionDTOS, RegionVO::new);
        return R.ok(regionVOS);
    }



    /**
     * 根据地点搜索
     * @param placeSearchReqDto 搜索条件
     * @return 搜索结果
     */
    @Override
    public R<BasePageVO<SearchPoiVO>> searchSuggestOnMap(PlaceSearchReqDto placeSearchReqDto) {
        BasePageDTO<SearchPoiDtTO> basePageDTO = mapService.searchSuggestOnMap(placeSearchReqDto);
        BasePageVO<SearchPoiVO> result = new BasePageVO<>();
        BeanCopyUtil.copyProperties(basePageDTO,result);
        return R.ok(result);
    }

    /**
     * 根据经纬度定位城市
     * @param cityLocationReqDto 定位信息
     * @return 城市信息
     */
    @Override
    public R<RegionCityVO> getCityLocation(CityLocationReqDto cityLocationReqDto) {
        RegionCityDTO locationDto = mapService.getCityLocation(cityLocationReqDto);
        RegionCityVO regionCityVO = new RegionCityVO();
        BeanCopyUtil.copyProperties(locationDto, regionCityVO);
        return R.ok(regionCityVO);
    }
}
